{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Visualizing the word2vec embeddings\n",
    "\n",
    "In this example, we'll train a word2vec model using Gensim and then, we'll visualize the embedding vectors using the `sklearn` implementation of [t-SNE](https://lvdmaaten.github.io/tsne/). t-SNE is a dimensionality reduction technique, which will help us visualize the multi-dimensional embedding vectors over a 2D Plot."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's start with the imports:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import logging\n",
    "import pprint  # beautify prints\n",
    "\n",
    "import gensim.downloader as gensim_downloader\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "from gensim.models.word2vec import Word2Vec\n",
    "from sklearn.manifold import TSNE\n",
    "\n",
    "logging.basicConfig(level=logging.INFO)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next, let's instantiate and train Gensim's word2vec model using the `text8` dataset. `text8` is embedded in Gensim and contains the tokenized version of the first 100mB of Wikipedia:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:gensim.models.word2vec:collecting all words and their counts\n",
      "INFO:gensim.models.word2vec:PROGRESS: at sentence #0, processed 0 words, keeping 0 word types\n",
      "INFO:gensim.models.word2vec:collected 253854 word types from a corpus of 17005207 raw words and 1701 sentences\n",
      "INFO:gensim.models.word2vec:Loading a fresh vocabulary\n",
      "INFO:gensim.models.word2vec:effective_min_count=5 retains 71290 unique words (28% of original 253854, drops 182564)\n",
      "INFO:gensim.models.word2vec:effective_min_count=5 leaves 16718844 word corpus (98% of original 17005207, drops 286363)\n",
      "INFO:gensim.models.word2vec:deleting the raw counts dictionary of 253854 items\n",
      "INFO:gensim.models.word2vec:sample=0.001 downsamples 38 most-common words\n",
      "INFO:gensim.models.word2vec:downsampling leaves estimated 12506280 word corpus (74.8% of prior 16718844)\n",
      "INFO:gensim.models.base_any2vec:estimated required memory for 71290 words and 100 dimensions: 92677000 bytes\n",
      "INFO:gensim.models.word2vec:resetting layer weights\n",
      "INFO:gensim.models.base_any2vec:training model with 3 workers on 71290 vocabulary and 100 features, using sg=0 hs=0 sample=0.001 negative=5 window=5\n",
      "INFO:gensim.models.base_any2vec:EPOCH 1 - PROGRESS: at 6.06% examples, 743125 words/s, in_qsize 4, out_qsize 1\n",
      "INFO:gensim.models.base_any2vec:EPOCH 1 - PROGRESS: at 12.05% examples, 738071 words/s, in_qsize 6, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 1 - PROGRESS: at 17.93% examples, 730943 words/s, in_qsize 4, out_qsize 2\n",
      "INFO:gensim.models.base_any2vec:EPOCH 1 - PROGRESS: at 23.63% examples, 726763 words/s, in_qsize 5, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 1 - PROGRESS: at 29.04% examples, 716662 words/s, in_qsize 5, out_qsize 1\n",
      "INFO:gensim.models.base_any2vec:EPOCH 1 - PROGRESS: at 34.80% examples, 718042 words/s, in_qsize 4, out_qsize 2\n",
      "INFO:gensim.models.base_any2vec:EPOCH 1 - PROGRESS: at 40.80% examples, 721219 words/s, in_qsize 4, out_qsize 1\n",
      "INFO:gensim.models.base_any2vec:EPOCH 1 - PROGRESS: at 46.80% examples, 724947 words/s, in_qsize 5, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 1 - PROGRESS: at 52.79% examples, 726500 words/s, in_qsize 5, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 1 - PROGRESS: at 58.50% examples, 725482 words/s, in_qsize 5, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 1 - PROGRESS: at 64.26% examples, 724976 words/s, in_qsize 3, out_qsize 2\n",
      "INFO:gensim.models.base_any2vec:EPOCH 1 - PROGRESS: at 70.02% examples, 724286 words/s, in_qsize 5, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 1 - PROGRESS: at 76.13% examples, 726792 words/s, in_qsize 5, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 1 - PROGRESS: at 81.78% examples, 723110 words/s, in_qsize 3, out_qsize 2\n",
      "INFO:gensim.models.base_any2vec:EPOCH 1 - PROGRESS: at 87.77% examples, 724232 words/s, in_qsize 4, out_qsize 2\n",
      "INFO:gensim.models.base_any2vec:EPOCH 1 - PROGRESS: at 93.59% examples, 723940 words/s, in_qsize 3, out_qsize 2\n",
      "INFO:gensim.models.base_any2vec:EPOCH 1 - PROGRESS: at 99.29% examples, 722664 words/s, in_qsize 4, out_qsize 1\n",
      "INFO:gensim.models.base_any2vec:worker thread finished; awaiting finish of 2 more threads\n",
      "INFO:gensim.models.base_any2vec:worker thread finished; awaiting finish of 1 more threads\n",
      "INFO:gensim.models.base_any2vec:worker thread finished; awaiting finish of 0 more threads\n",
      "INFO:gensim.models.base_any2vec:EPOCH - 1 : training on 17005207 raw words (12505564 effective words) took 17.3s, 723435 effective words/s\n",
      "INFO:gensim.models.base_any2vec:EPOCH 2 - PROGRESS: at 5.47% examples, 679041 words/s, in_qsize 5, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 2 - PROGRESS: at 11.46% examples, 708245 words/s, in_qsize 5, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 2 - PROGRESS: at 17.75% examples, 731124 words/s, in_qsize 4, out_qsize 1\n",
      "INFO:gensim.models.base_any2vec:EPOCH 2 - PROGRESS: at 23.99% examples, 741275 words/s, in_qsize 5, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 2 - PROGRESS: at 30.04% examples, 743897 words/s, in_qsize 4, out_qsize 2\n",
      "INFO:gensim.models.base_any2vec:EPOCH 2 - PROGRESS: at 35.39% examples, 729843 words/s, in_qsize 3, out_qsize 2\n",
      "INFO:gensim.models.base_any2vec:EPOCH 2 - PROGRESS: at 41.03% examples, 726453 words/s, in_qsize 4, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 2 - PROGRESS: at 46.91% examples, 726466 words/s, in_qsize 5, out_qsize 1\n",
      "INFO:gensim.models.base_any2vec:EPOCH 2 - PROGRESS: at 52.85% examples, 727976 words/s, in_qsize 6, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 2 - PROGRESS: at 58.91% examples, 730417 words/s, in_qsize 5, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 2 - PROGRESS: at 64.84% examples, 731374 words/s, in_qsize 5, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 2 - PROGRESS: at 70.55% examples, 728180 words/s, in_qsize 4, out_qsize 2\n",
      "INFO:gensim.models.base_any2vec:EPOCH 2 - PROGRESS: at 76.37% examples, 727324 words/s, in_qsize 5, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 2 - PROGRESS: at 82.25% examples, 726980 words/s, in_qsize 4, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 2 - PROGRESS: at 88.18% examples, 727937 words/s, in_qsize 5, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 2 - PROGRESS: at 94.42% examples, 730257 words/s, in_qsize 4, out_qsize 1\n",
      "INFO:gensim.models.base_any2vec:worker thread finished; awaiting finish of 2 more threads\n",
      "INFO:gensim.models.base_any2vec:worker thread finished; awaiting finish of 1 more threads\n",
      "INFO:gensim.models.base_any2vec:worker thread finished; awaiting finish of 0 more threads\n",
      "INFO:gensim.models.base_any2vec:EPOCH - 2 : training on 17005207 raw words (12507617 effective words) took 17.1s, 729648 effective words/s\n",
      "INFO:gensim.models.base_any2vec:EPOCH 3 - PROGRESS: at 5.94% examples, 734309 words/s, in_qsize 3, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 3 - PROGRESS: at 11.99% examples, 738153 words/s, in_qsize 3, out_qsize 2\n",
      "INFO:gensim.models.base_any2vec:EPOCH 3 - PROGRESS: at 17.99% examples, 741764 words/s, in_qsize 4, out_qsize 1\n",
      "INFO:gensim.models.base_any2vec:EPOCH 3 - PROGRESS: at 23.69% examples, 735361 words/s, in_qsize 4, out_qsize 1\n",
      "INFO:gensim.models.base_any2vec:EPOCH 3 - PROGRESS: at 29.69% examples, 739833 words/s, in_qsize 4, out_qsize 2\n",
      "INFO:gensim.models.base_any2vec:EPOCH 3 - PROGRESS: at 35.57% examples, 739825 words/s, in_qsize 2, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 3 - PROGRESS: at 41.39% examples, 738348 words/s, in_qsize 5, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 3 - PROGRESS: at 47.21% examples, 736982 words/s, in_qsize 5, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 3 - PROGRESS: at 53.26% examples, 739294 words/s, in_qsize 5, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 3 - PROGRESS: at 58.61% examples, 732432 words/s, in_qsize 5, out_qsize 1\n",
      "INFO:gensim.models.base_any2vec:EPOCH 3 - PROGRESS: at 64.73% examples, 735561 words/s, in_qsize 5, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 3 - PROGRESS: at 70.66% examples, 736336 words/s, in_qsize 5, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 3 - PROGRESS: at 76.25% examples, 732533 words/s, in_qsize 6, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 3 - PROGRESS: at 81.95% examples, 729855 words/s, in_qsize 4, out_qsize 1\n",
      "INFO:gensim.models.base_any2vec:EPOCH 3 - PROGRESS: at 87.65% examples, 728613 words/s, in_qsize 3, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 3 - PROGRESS: at 93.53% examples, 728802 words/s, in_qsize 4, out_qsize 1\n",
      "INFO:gensim.models.base_any2vec:EPOCH 3 - PROGRESS: at 99.12% examples, 726366 words/s, in_qsize 3, out_qsize 2\n",
      "INFO:gensim.models.base_any2vec:worker thread finished; awaiting finish of 2 more threads\n",
      "INFO:gensim.models.base_any2vec:worker thread finished; awaiting finish of 1 more threads\n",
      "INFO:gensim.models.base_any2vec:worker thread finished; awaiting finish of 0 more threads\n",
      "INFO:gensim.models.base_any2vec:EPOCH - 3 : training on 17005207 raw words (12506956 effective words) took 17.2s, 727716 effective words/s\n",
      "INFO:gensim.models.base_any2vec:EPOCH 4 - PROGRESS: at 6.06% examples, 746760 words/s, in_qsize 4, out_qsize 1\n",
      "INFO:gensim.models.base_any2vec:EPOCH 4 - PROGRESS: at 11.93% examples, 737785 words/s, in_qsize 3, out_qsize 2\n",
      "INFO:gensim.models.base_any2vec:EPOCH 4 - PROGRESS: at 17.64% examples, 729064 words/s, in_qsize 4, out_qsize 1\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:gensim.models.base_any2vec:EPOCH 4 - PROGRESS: at 23.57% examples, 733233 words/s, in_qsize 6, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 4 - PROGRESS: at 29.45% examples, 734405 words/s, in_qsize 5, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 4 - PROGRESS: at 35.27% examples, 734472 words/s, in_qsize 5, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 4 - PROGRESS: at 41.15% examples, 734749 words/s, in_qsize 4, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 4 - PROGRESS: at 46.62% examples, 727076 words/s, in_qsize 6, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 4 - PROGRESS: at 52.26% examples, 724129 words/s, in_qsize 5, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 4 - PROGRESS: at 57.85% examples, 721456 words/s, in_qsize 4, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 4 - PROGRESS: at 63.43% examples, 719112 words/s, in_qsize 5, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 4 - PROGRESS: at 69.02% examples, 716350 words/s, in_qsize 4, out_qsize 1\n",
      "INFO:gensim.models.base_any2vec:EPOCH 4 - PROGRESS: at 74.90% examples, 717783 words/s, in_qsize 5, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 4 - PROGRESS: at 80.72% examples, 716780 words/s, in_qsize 5, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 4 - PROGRESS: at 86.13% examples, 713723 words/s, in_qsize 4, out_qsize 1\n",
      "INFO:gensim.models.base_any2vec:EPOCH 4 - PROGRESS: at 92.12% examples, 715768 words/s, in_qsize 4, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 4 - PROGRESS: at 97.94% examples, 715799 words/s, in_qsize 4, out_qsize 1\n",
      "INFO:gensim.models.base_any2vec:worker thread finished; awaiting finish of 2 more threads\n",
      "INFO:gensim.models.base_any2vec:worker thread finished; awaiting finish of 1 more threads\n",
      "INFO:gensim.models.base_any2vec:worker thread finished; awaiting finish of 0 more threads\n",
      "INFO:gensim.models.base_any2vec:EPOCH - 4 : training on 17005207 raw words (12505485 effective words) took 17.4s, 716802 effective words/s\n",
      "INFO:gensim.models.base_any2vec:EPOCH 5 - PROGRESS: at 5.53% examples, 686469 words/s, in_qsize 5, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 5 - PROGRESS: at 11.58% examples, 713697 words/s, in_qsize 4, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 5 - PROGRESS: at 17.52% examples, 721684 words/s, in_qsize 4, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 5 - PROGRESS: at 23.40% examples, 722041 words/s, in_qsize 4, out_qsize 2\n",
      "INFO:gensim.models.base_any2vec:EPOCH 5 - PROGRESS: at 29.45% examples, 729484 words/s, in_qsize 5, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 5 - PROGRESS: at 35.39% examples, 729402 words/s, in_qsize 4, out_qsize 1\n",
      "INFO:gensim.models.base_any2vec:EPOCH 5 - PROGRESS: at 41.03% examples, 725698 words/s, in_qsize 6, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 5 - PROGRESS: at 46.80% examples, 725010 words/s, in_qsize 5, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 5 - PROGRESS: at 52.50% examples, 721861 words/s, in_qsize 4, out_qsize 1\n",
      "INFO:gensim.models.base_any2vec:EPOCH 5 - PROGRESS: at 58.50% examples, 724836 words/s, in_qsize 4, out_qsize 1\n",
      "INFO:gensim.models.base_any2vec:EPOCH 5 - PROGRESS: at 64.20% examples, 723842 words/s, in_qsize 4, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 5 - PROGRESS: at 70.08% examples, 724553 words/s, in_qsize 5, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 5 - PROGRESS: at 76.25% examples, 726258 words/s, in_qsize 4, out_qsize 1\n",
      "INFO:gensim.models.base_any2vec:EPOCH 5 - PROGRESS: at 82.13% examples, 724922 words/s, in_qsize 4, out_qsize 2\n",
      "INFO:gensim.models.base_any2vec:EPOCH 5 - PROGRESS: at 88.12% examples, 725571 words/s, in_qsize 5, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 5 - PROGRESS: at 93.77% examples, 723416 words/s, in_qsize 5, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:EPOCH 5 - PROGRESS: at 99.35% examples, 721606 words/s, in_qsize 5, out_qsize 0\n",
      "INFO:gensim.models.base_any2vec:worker thread finished; awaiting finish of 2 more threads\n",
      "INFO:gensim.models.base_any2vec:worker thread finished; awaiting finish of 1 more threads\n",
      "INFO:gensim.models.base_any2vec:worker thread finished; awaiting finish of 0 more threads\n",
      "INFO:gensim.models.base_any2vec:EPOCH - 5 : training on 17005207 raw words (12506300 effective words) took 17.3s, 722285 effective words/s\n",
      "INFO:gensim.models.base_any2vec:training on a 85026035 raw words (62531922 effective words) took 86.4s, 723741 effective words/s\n"
     ]
    }
   ],
   "source": [
    "model = Word2Vec(\n",
    "    sentences=gensim_downloader.load('text8'),  # download and load the text8 dataset\n",
    "    sg=0, size=100, window=5, negative=5, min_count=5, iter=5)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's see the results of the training by showing the most similar words to the combination of `woman` and `king`:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:gensim.models.keyedvectors:precomputing L2-norms of word weight vectors\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[('queen', 0.6840947866439819),\n",
      " ('elizabeth', 0.6495713591575623),\n",
      " ('empress', 0.636602520942688),\n",
      " ('prince', 0.6254769563674927),\n",
      " ('princess', 0.6251226663589478),\n",
      " ('emperor', 0.6248080730438232),\n",
      " ('throne', 0.6207752227783203),\n",
      " ('isabella', 0.5928826332092285),\n",
      " ('son', 0.5875461101531982),\n",
      " ('regent', 0.5874534845352173)]\n"
     ]
    }
   ],
   "source": [
    "pprint.pprint(model.wv.most_similar(positive=['woman', 'king'], negative=['man']))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can see that the model has been trained properly, because the most similar words are quite relevant to the input query."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next, we'll continue with the t-SNE visualization. To do this, we'll collect the words (and vectors), most similar to the set of seed words below. Each seed word will serve as the core of a `embedding_groups` of it's most similar words:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "target_words = ['mother', 'car', 'tree', 'science', 'building', 'elephant', 'green']\n",
    "word_groups, embedding_groups = list(), list()\n",
    "\n",
    "for word in target_words:\n",
    "    words = [w for w, _ in model.wv.most_similar(word, topn=5)]\n",
    "    word_groups.append(words)\n",
    "\n",
    "    embedding_groups.append([model.wv[w] for w in words])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next, we'll use the `embedding_groups` to train the t-SNE model for 5000 iterations:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "embedding_groups = np.array(embedding_groups)\n",
    "m, n, vector_size = embedding_groups.shape\n",
    "tsne_model_en_2d = TSNE(perplexity=8, n_components=2, init='pca', n_iter=5000)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next, we'll use the model to generate embeddings reduced to only 2 dimensions:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "embeddings_2d = tsne_model_en_2d.fit_transform(embedding_groups.reshape(m * n, vector_size))\n",
    "embeddings_2d = np.array(embeddings_2d).reshape(m, n, 2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Finally, we'll visualize the generated embeddings:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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emXP0qVL1adPH73zzjvq2LGjfHx81LVrVztXCgCVR5gFAACoo0pGYiUpNjZWsbGxZbb5/PPPy903KSmpusoCAJvgNmMAAAAAgMMhzAIAAAAAHA5hFgAAAADgcHhmFgAAoB6ZEve5LlwoLNPu6uqkaQl97VARAFwfRmYBAADqkfKCbEXtAFBbEWYBAAAAAA6HMAsAAAAAcDiEWQAAAACAwyHMAgAAAAAcDmEWAACgHnF1dbqmdgCorXg1DwAAQD3C63cA1BWMzAIAAAAAHA5hFgAAAHXa6dOnNX/+fHuXAcDGCLMAAACo064UZgsKCuxQDQBbIcwCAACgTouLi9N3332nwMBAhYWFKSIiQgMGDJCvr68kaenSperSpYsCAwM1duxYFRYWSpISExPVrVs3BQcH68EHH5TFYrH25+vrq4CAAD399NN2Oy+gvmMCKAAAANRpCQkJ2rt3r9LT05WUlKR+/fpp7969ateunTIyMrRixQpt2bJFLi4uGj9+vJYtW6Y//vGPmj59utavX6/GjRvrtdde0+uvv67HHntMa9asUWZmpgzD0OnTp+19ekC9RZgFAABAvdKlSxe1a9dOkrRhwwalpaUpLCxMknT+/Hm1atVK27Zt0/79+xUeHi5Junjxorp166amTZvKzc1Nf/nLX9S/f3/179/fbucB1HeEWQAAANQrjRs3tn42TVMjR47Uq6++Wmqbzz77TL169dKHH35YZv/t27drw4YNWrVqld566y1t3Lix2msGUBbPzAIAUI95eHhc1345OTlavny5jasBqoenp6dyc3PLXdezZ0+tWrVKx44dkySdPHlSBw8eVNeuXbVlyxZ9++23kqRz584pKytLFotFZ86c0R//+Ee98cYb2rVrV42dB4DSGJkFAADXrCTMDh061N6lAFfVsmVLhYeHy8/PT+7u7mrdurV1na+vr6ZPn67evXurqKhILi4umjdvnrp27aolS5booYce0oULFyRJ06dPl6enpwYOHKj8/HyZpqnXX3/dXqcF1HuEWQAA6pC4uDi1adNGjz32mCQpPj5eHh4eMk1TK1eu1IULFzRo0CC9+OKLpfb785//rIcfflj9+vWTJMXExKh///4aNGiQ4uLilJSUpAsXLuixxx7T2LFjFRcXp4yMDAUGBmrkyJF68skna/xcgWtR0Z0EQ4YM0ZAhQ8q09+jR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VaoPjsnb21snTpyo8Od29OjR2r9/fw1XBgCA/RFmAVRowIABiouLq/T2oaGhmjNnTjVWVDUffPCBAgIC1LlzZz388MPKyclRjx49FBAQoJ49e+rQoUOSpJiYGE2cOFF33XWXbrvtNmuYPHLkiCIjIxUYGCg/Pz999dVXiouL0/nz5xUYGKhhw4YpJydHPj4+GjFihPz8/PTjjz/Kw8PDWsOqVasUExMjSTp69KgGDRqkzp07q3Pnzvr6668VFxen7777ToGBgXrmmWdKBZn8/Hw98sgj8vf3V1BQkDZt2iRJWrJkie6//3716dNH7du317PPPluD31XY07vvvitfX197l1EtXn/9dfn5+cnPz0+zZ89WSkqKAgIClJ+fr3PnzqlTp07au3evvcsEANgJYRaohwoKCjRs2DB17NhRgwcPVl5ennUESLo0uhoVFSXpUkh6/PHHy/SRlpZmDWDz5s2zticlJal///6SLo3kjho1SlFRUbrttttKhdxp06bJx8dH3bt310MPPWQd8Z0zZ458fX0VEBCgP//5zzY973379mn69OnauHGjdu3apTfffFMTJkzQyJEjtXv3bg0bNqzUqPKRI0eUnJystWvXWgP98uXLFR0drfT0dO3atUuBgYFKSEiQu7u70tPTtWzZMklSdna2xo8fr3379qlt27ZXrGnixIm6++67tWvXLu3YsUOdOnVSQkKCbr/9dqWnp2vGjBmltp83b54Mw9CePXv04YcfauTIkcrPz5ckpaena8WKFdqzZ49WrFihH3/80abfP1Sv++67TyEhIerUqZMWLFhQZn15P7eSFBUVpdTUVEmSh4eHJk+erM6dO6tr1646evSoJF3xjza1WVpamhYvXqxvvvlG27Zt08KFC+Xs7KwBAwbo+eef17PPPqvhw4df050mAIC6hTAL1EMHDhzQ+PHjlZGRoSZNmpS6pbWyHnnkEc2dO1e7du2qcLvMzEx9+eWX2r59u1588UX9+uuvSklJ0erVq7Vr1y59/vnn1l/EJSkhIUE7d+7U7t279c4771xzXRXZuHGjHnzwQXl5eUmSWrRooa1bt2ro0KGSpIcffljJycnW7e+77z41aNBAvr6+1lAQFhamxYsXKz4+Xnv27JGnp2e5x2rbtq26du1aqZrGjRsnSXJyclLTpk0r3D45OVnDhw+XJN1xxx1q27at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p8/RDF+SdAAWszpiixcvZtasWTzyyCMHfczw4cOZNWsWQ4YMOYqRSZKKXVVVFVVVVQ36brzxxgbre24Albt9730GDBjAU089tc/rL168uFnilCQdOqcZS5IkSZLyjsVsEdmwYQNnnnkmEydO5KyzzmLs2LFs27aN6dOnc/bZZ9OvXz9uvPFGtm7dSllZGbt27QJgy5Yt9es1NTVceOGF9O/fn0GDBrF27VoA3n//fcaOHVv/+iklAP7whz8wcOBA+vbty9SpU9mxY8c+cd1333307duXc845h5tuuqm+/+6776ZXr16Ul5fzhS98geuvv77R2MaPH1+/LkmSJKk4WMwWmTVr1vClL32JV155hfbt23PHHXfw0EMPsXr1alasWMGMGTP40Ic+xPDhw/ntb38LwLx58xgzZgylpaVMnDiRL3/5yyxfvpznnnuu/tEEL730Ej/60Y94+eWXWbduHc8++yzbt29nypQpVFdXs3LlSmpra/nxj3/cIJ633nqLm266iUWLFrFs2TKef/555s+fz1tvvcUtt9zCkiVLePbZZ3n11VcBGo3t/PPPp7S09Bh+FyVJkiS1NIvZInPGGWcwdOhQAD7/+c/z9NNP07ZtW6655hp+85vf1D+L79prr2XOnDkAzJkzh6uvvpqtW7fy5ptvMnr0aADatm1bv395eTndunWjVatWDBgwgA0bNrBmzRrKysro1asXAJMnT97neqPnn9tTnXcAAA+/SURBVH+e4cOHc+qpp9K6dWsmTpzIU089xdKlSxk2bBgdO3aktLSUcePG1R+zd2yXXHLJUfyOSZKKwdqvfZTXppTs09Z+7aMtHZokqQkWs0UmIhqsl5aWsnTpUsaOHcsjjzzCyJEjARg6dCgbNmxg8eLF7N69m3POOWe/r3vCCSfUL5eUlFBbW9v8wWf2jq2srOyofS1JUnE4ecDnoKRNw86SNpw8cFTLBCRJOiCL2SLz17/+tf45eb/61a8YMGAAmzdv5tJLL+W2225j+fLl9fteddVVTJgwgauvvhqom+LbrVs35s+fD8COHTvYtm1bk1+rd+/ebNiwgZqaGgDmzp3LsGHDGuxTXl7Ok08+yT//+U92797Nfffdx7Bhwzj33HN58skn2bRpE7W1tTz44IMNjts7NkmSjkSnihlEq4a/FkWrEjqNmtFCEUmSDsRitsj07t2b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\n",
      "text/plain": [
       "<Figure size 1152x648 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot the results\n",
    "plt.figure(figsize=(16, 9))\n",
    "# Different color and marker for each group of similar words\n",
    "color_map = plt.get_cmap('Dark2')(np.linspace(0, 1, len(target_words)))\n",
    "markers = ['o', 'v', 's', 'x', 'D', '*', '+']\n",
    "\n",
    "# Iterate over all groups\n",
    "for label, similar_words, emb, color, marker in \\\n",
    "        zip(target_words, word_groups, embeddings_2d, color_map, markers):\n",
    "    x, y = emb[:, 0], emb[:, 1]\n",
    "\n",
    "    # Plot the points of each word group\n",
    "    plt.scatter(x=x, y=y, c=[color], label=label, marker=marker)\n",
    "\n",
    "    # Annotate each vector with it's corresponding word\n",
    "    for word, w_x, w_y in zip(similar_words, x, y):\n",
    "        plt.annotate(word, xy=(w_x, w_y), xytext=(0, 15),\n",
    "                     textcoords='offset points', ha='center', va='top', size=10)\n",
    "plt.legend()\n",
    "plt.grid(True)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {},
   "source": [
    "We can see how the words of each embedding group are clustered in the same area of the plot. This once again proves that the word embedding vectors reflect the true meaning of the words. "
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
